package com.example.gobang.API;

import com.example.gobang.API.MatchAPI;
import com.example.gobang.model.UserInfo;
import com.example.gobang.model.UserMapper;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.jms.JmsProperties;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;


@Slf4j
@RestController
public class UserAPI {
    @Resource(name = "userMapper")
    private UserMapper userMapper;

    @Resource(name = "matchAPI")
    private MatchAPI matchAPI;

    // 控制层登录接口
    @GetMapping("/login")
    @ResponseBody
    public Object login( String userName, String password, HttpServletRequest request) {
        log.info("登录控制层接收到的参数username: " + userName + " password: " + password);
        if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
            return new UserInfo();
        }
        // 先查找对象
        UserInfo userInfo = userMapper.selectByName(userName);
//        如果对象为空 或者密码错误
//        就返回一个没有数据的对象
        if (userInfo == null || !userInfo.getPassword().equals(password)) {
            return new UserInfo();
        }

//        正确就设置session并返回当前对象
        HttpSession session = request.getSession(true);
        session.setAttribute("userInfo", userInfo);
        return userInfo;
    }

    // 控制层注册接口
    @PostMapping("/register")
    @ResponseBody
    public Object register(String userName, String password) {
        log.info("注册控制层接收到的参数username: " + userName + " password: " + password);
//        校验参数
        if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
            return new UserInfo();
        }
        //        整合成一个对象
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName(userName);
        userInfo.setPassword(password);
        // 先插入数据
        try {
//            插入成功就返回对象
//            插入失败就返回一个空对象
            userMapper.insertUser(userInfo);
        } catch (Exception e) {
            return new UserInfo();
        }

        // 插入成功就返回该对象
        return userInfo;
    }

    // 控制层——查询用户接口
    @GetMapping("/getUser")
    @ResponseBody
    public Object getUser(HttpServletRequest request) {

        //        从session 中获取用户信息
        HttpSession session = request.getSession(false);
        if (session== null) {
//            如果session 为空说明登录失败的
            return new UserInfo();
        }

//        获取登录用户
        UserInfo userInfo = (UserInfo)session.getAttribute("userInfo");
        return  userMapper.selectByName(userInfo.getUserName());
    }

}
